package com.gitee.zw.rule.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * 规则维度，可以作为条件，也可以作为目标
 * 作为条件时，operator 为比较运算符，value 为比较值
 * 作为目标时，operator 为赋值运算符，value 为赋值值
 *
 * @author Jason
 */
@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class SourceRuleDimension {
    /**
     * 维度编码，通常是一个字段名
     */
    private String code;
    /**<p>
     * 1. <b>作为条件时，operator 为比较运算符，</b>如：<br/>
     * >,>=,<,<=,==,!=<br/>
     * 比如: operator =" >", <br/>
     * value="20", 则最终生成的表达式为：<br/>
     * code > 20<br/>
     * operator也可以是函数，如：<br/>
     * 比如: opersator =" in", <br/>
     * value="1,2,3,4,5", 则最终生成的表达式为：<br/>
     * code in (1,2,3,4,5)<br/>
     * 再比如: opersator =" check", <br/>
     * code 为空，value="age, 20, workedYears", 则最终生成的表达式为：<br/>
     * check(age, 20, workedYears)<br/>
     * </p>
     * <p>
     * <b>2.作为目标时，operator 为赋值运算符，</b>如：<br/>
     * =,+=,-=,*=,/=<br/>
     * 也可以是函数，如：<br/>
     * 比如: opersator =" = calc", <br/>
     * value="age, 20, workedYears", 则最终生成的表达式为：<br/>
     * code = calc(age, 20, workedYears)
     * </p>
     */
    private String operator;
    /**
     * 值，可以是一个常量，也可以是一个表达式，如：<br/>
     * “20”，“age” <br/>
     * 也可以作为函数的参数，如：<br/>
     * “age, 20, workedYears”
     */
    private String value;
//    private String dataType;
}
